home *** CD-ROM | disk | FTP | other *** search
/ Die Speccy' 97 / Die Speccy' 97.iso / amiga_system / the_aminet / util / moni / msfu_v11.lha / MSFU / src / MSFU.e < prev    next >
Text File  |  1995-09-09  |  5KB  |  173 lines

  1. OPT OSVERSION = 37
  2. OPT PREPROCESS
  3.  
  4.  
  5. ->/////////////////////////////////////////////////////////////////////////////
  6. ->/////////////////////////////////////////////////////// #define ... ... /////
  7. ->/////////////////////////////////////////////////////////////////////////////
  8. ->#define DEBUG
  9.  
  10.  
  11. ->/////////////////////////////////////////////////////////////////////////////
  12. ->//////////////////////////////////////////////////////////// MODULE ... /////
  13. ->/////////////////////////////////////////////////////////////////////////////
  14. MODULE 'dos/dos'
  15. MODULE 'exec/ports' , 'exec/io' , 'devices/timer'
  16. MODULE '*Trace'
  17.  
  18. #ifdef DEBUG
  19. MODULE 'tools/exceptions'
  20. #endif
  21.  
  22.  
  23. ->/////////////////////////////////////////////////////////////////////////////
  24. ->//////////////////////////////////////////////// RAISE ... IF ... = ... /////
  25. ->/////////////////////////////////////////////////////////////////////////////
  26. RAISE    "ARGS"    IF    ReadArgs()            =    NIL    ,
  27.         "PORT"    IF    CreateMsgPort()        =    NIL    ,
  28.         "TIME"    IF    CreateIORequest()    =    NIL    ,
  29.         "DEV"    IF    OpenDevice()        <>    NIL
  30.  
  31.  
  32. ->/////////////////////////////////////////////////////////////////////////////
  33. ->/////////////////////////////////////////////////////// CONST ... = ... /////
  34. ->/////////////////////////////////////////////////////////////////////////////
  35. ENUM    ARG_TRACEFILE ,
  36.         ARG_LIBS , ARG_DEVS , ARG_ALL ,
  37.         ARG_FIRSTDELAY , ARG_DELAY ,
  38.         ARG_BEEP , ARG_REQUESTER ,
  39.         NUMBER_ARGS
  40.  
  41. ENUM    QUIT , YES , NO , MAX_ANSWER
  42.  
  43. #ifdef DEBUG
  44. CONST    TIMEUNIT    =    1    ->    second
  45. #endif
  46. #ifndef DEBUG
  47. CONST    TIMEUNIT    =    60    ->    minute
  48. #endif
  49.  
  50.  
  51. ->/////////////////////////////////////////////////////////////////////////////
  52. ->///////////////////////////////////////////////////////// DEF ... : ... /////
  53. ->/////////////////////////////////////////////////////////////////////////////
  54. DEF    timer_mp    :    PTR TO mp
  55. DEF    timer_req    :    PTR TO timerequest
  56.  
  57.  
  58. ->/////////////////////////////////////////////////////////////////////////////
  59. ->///////////////////////////////////////////////////////////// PROC main /////
  60. ->/////////////////////////////////////////////////////////////////////////////
  61. PROC main() HANDLE
  62.  
  63.     DEF rdargs = NIL , args : PTR TO LONG
  64.     DEF tr : PTR TO trace
  65.     DEF first = TRUE , delay
  66.  
  67.     PrintF( '            \c1;33;40\cMSFU\c0;31;40\c v1.1\n' , $9B , $6D , $9B , $6D )
  68.     PutStr( 'Copyright ⌐ 1995, Lionel Vintenat\n' )
  69.     PrintF( '\c1;32;40\c---------------------------------\c0;31;40\c\n' , $9B , $6D , $9B , $6D )
  70.  
  71.     rdargs := ReadArgs( 'TF=TRACEFILE,LIBS/S,DEVS/S,ALL/S,FD=FIRSTDELAY/N,DELAY/N,BEEP/S,REQUESTER/S' ,
  72.                         NEW args[ NUMBER_ARGS ] , NIL )
  73.  
  74.     NEW tr.create( args[ ARG_TRACEFILE ] )
  75.     tr.load()
  76.  
  77.     IF ( args[ ARG_LIBS ] OR args[ ARG_DEVS ] OR args[ ARG_ALL ] )
  78.  
  79.         OpenDevice( TIMERNAME , UNIT_VBLANK ,
  80.             timer_req := CreateIORequest( timer_mp := CreateMsgPort() , SIZEOF timerequest ) , 0 )
  81.  
  82.         delay := TIMEUNIT * ( IF args[ ARG_FIRSTDELAY ] THEN Long( args[ ARG_FIRSTDELAY ] ) ELSE 10 )
  83.         LOOP
  84.             timer_delay( delay )
  85.             IF args[ ARG_BEEP ]
  86.                 DisplayBeep( NIL )
  87.                 Delay( 50 )
  88.             ENDIF
  89.             SELECT MAX_ANSWER OF ( IF args[ ARG_REQUESTER ] THEN request() ELSE YES )
  90.                 CASE YES
  91.                     tr.update( args[ ARG_LIBS ] OR args[ ARG_ALL ] , args[ ARG_DEVS ] OR args[ ARG_ALL ] )
  92.                     tr.save()
  93.                 CASE QUIT
  94.                     Raise( "^C" )
  95.             ENDSELECT
  96.             IF first
  97.                 delay := IF args[ ARG_DELAY ] THEN Long( args[ ARG_DELAY ] ) ELSE 10
  98.                 first:= FALSE
  99.             ENDIF
  100.         ENDLOOP
  101.  
  102.     ELSE
  103.         tr.sort()
  104.         tr.print()
  105.     ENDIF
  106.  
  107. EXCEPT DO
  108.  
  109.     SELECT exception
  110.         CASE "MEM"
  111.             PutStr( 'Out of memory !\n' )
  112.         CASE "ARGS"
  113.             PrintFault( IoErr() , 'Bad arguments ' )
  114.         CASE "PORT"
  115.             PutStr( 'Can''t create message port !\n' )
  116.         CASE "TIME"
  117.             PutStr( 'Can''t create timer request !\n' )
  118.         CASE "DEV"
  119.             PutStr( 'Can''t open timer device !\n' )
  120.         CASE "^C"
  121.             PutStr( '***user break***\n' )
  122.     ENDSELECT
  123.  
  124.     IF timer_mp THEN DeleteMsgPort( timer_mp )
  125.     IF timer_req
  126.         IF timer_req.io.device THEN CloseDevice( timer_req )
  127.         DeleteIORequest( timer_req )
  128.     ENDIF
  129.     IF rdargs THEN FreeArgs( rdargs )
  130.  
  131.     #ifdef DEBUG
  132.     report_exception()
  133.     #endif
  134.  
  135. ENDPROC
  136.  
  137.  
  138. ->/////////////////////////////////////////////////////////////////////////////
  139. ->//////////////////////////////////////////////////////// Version string /////
  140. ->/////////////////////////////////////////////////////////////////////////////
  141. CHAR '$VER: MSFU 1.1 (9.9.95)'
  142.  
  143.  
  144. ->/////////////////////////////////////////////////////////////////////////////
  145. ->////////////////////////////////////////////////////////// PROC request /////
  146. ->/////////////////////////////////////////////////////////////////////////////
  147. PROC request() IS EasyRequestArgs(    NIL ,
  148.                                     [ 20 , 0 , 'MSFU is talking to you...'  , 'Ready to save current state ?' , 'Yes|No|Quit' ] ,
  149.                                     0 , NIL )
  150.  
  151.  
  152. ->/////////////////////////////////////////////////////////////////////////////
  153. ->////////////////////////////////////////////////////// PROC timer_delay /////
  154. ->/////////////////////////////////////////////////////////////////////////////
  155. PROC timer_delay( secs )
  156.  
  157.     DEF sig
  158.  
  159.     timer_req.time.secs := secs
  160.     timer_req.time.micro := 0
  161.     timer_req.io.command := TR_ADDREQUEST
  162.     SendIO( timer_req )
  163.     sig := Wait( Shl( 1 , timer_mp.sigbit ) OR SIGBREAKF_CTRL_C )
  164.     IF ( sig AND SIGBREAKF_CTRL_C )
  165.         AbortIO( timer_req )
  166.         WaitIO( timer_req )
  167.         Raise( "^C" )
  168.     ELSE
  169.         WaitIO( timer_req )
  170.     ENDIF
  171.  
  172. ENDPROC
  173.